﻿==============================================================================
DOSYA ADI  : ServerStartStopHandler.cpp
KAYNAK      : -GameServer\ServerStartStopHandler.cpp
SISTEM      : v2369 Reconnect - SUNUCU
BOYUT       : 19522 bayt / 690 satir
ACIKLAMA    : Sunucu baslangicinda bekleyen reconnect oturumlarinin geri yuklenmesi
ESLESME     : 6 satir / 1 blok
==============================================================================

NOT: Bu dosya yalnizca RECONNECT ile ilgili kod bloklarini icerir.
     Satir numaralari KAYNAK dosyadaki orijinal satirlardir.

----------------------------------------------------------------------
>> KAYNAK SATIR 473 - 569
----------------------------------------------------------------------
   473 | 			CUser* pUser = g_pMain->GetUserPtr(i);
   474 | 			if (pUser == nullptr || !pUser->isInGame())
   475 | 				continue;
   476 | 
   477 | 			CNpcThread* zoneitrThread = g_pMain->m_arNpcThread.GetData(pUser->GetZoneID());
   478 | 			if (!zoneitrThread)
   479 | 				continue;
   480 | 
   481 | 			zoneitrThread->m_arNpcArray.m_lock.lock();
   482 | 			auto copymap = zoneitrThread->m_arNpcArray.m_UserTypeMap;
   483 | 			zoneitrThread->m_arNpcArray.m_lock.unlock();
   484 | 
   485 | 			foreach(ax, copymap)
   486 | 			{
   487 | 				if (ax->second && ax->second->GetProtoID() == 13013)
   488 | 					pUser->ClientEvent(ax->second->GetID());
   489 | 			}
   490 | 
   491 | 		}
   492 | 		sleep(myrand(1250, 2000));
   493 | 	}
   494 | #endif
   495 | 	return (uint32)0;
   496 | }
   497 | 
   498 | void SweepReconnectTickets(); // User.cpp: süresi dolan reconnect ticket/ parti slotu temizliği
   499 | 
   500 | #pragma region CGameServerDlg::Timer_UpdateSessions(void * lpParam)
   501 | uint32 CGameServerDlg::Timer_UpdateSessions(void* lpParam)
   502 | {
   503 | 	while (g_bRunning)
   504 | 	{
   505 | 		g_pMain->m_socketMgr.GetLock().lock();
   506 | 		SessionMap sessMap = g_pMain->m_socketMgr.GetActiveSessionMap();
   507 | 		g_pMain->m_socketMgr.GetLock().unlock();
   508 | 		foreach(itr, sessMap)
   509 | 		{
   510 | 			CUser* pUser = TO_USER(itr->second);
   511 | 			if (pUser == nullptr)
   512 | 				continue;
   513 | 
   514 | 			if (!pUser->m_strAccountID.empty() && !pUser->isInGame())
   515 | 			{
   516 | 				ULONGLONG timeout = KOSOCKET_LOADING_TIMEOUT, nDifference = (UNIXTIME2 - pUser->GetLastResponseTime());
   517 | 				if (nDifference >= timeout)
   518 | 				{
   519 | 					pUser->goDisconnect("time out", __FUNCTION__);
   520 | 					continue;
   521 | 				}
   522 | 			}
   523 | 
   524 | 			if (pUser->isInGame())
   525 | 			{
   526 | 				// Reconnect sistemi: SUSPENDED süresi dolan karakteri düşür.
   527 | 				if (pUser->UpdateReconnectSuspend())
   528 | 					continue;
   529 | 
   530 | 				// Eski tip planlı disconnect (varsa) için süre kontrolü.
   531 | 				if (pUser->ProcessReconnectPendingDisconnect())
   532 | 					continue;
   533 | 
   534 | 				pUser->Update();
   535 | 				if (UNIXTIME2 > g_pMain->DelayedTime)
   536 | 				{
   537 | 					g_pMain->DelayedTime = UNIXTIME2 + (30 * SECOND);
   538 | 					pUser->CheckDelayedTime();
   539 | 				}
   540 | 			}
   541 | 		}
   542 | 
   543 | 		// Süresi dolan reconnect ticketlarını temizle (parti slotu dahil).
   544 | 		SweepReconnectTickets();
   545 | 		sleep(1 * SECOND);
   546 | 	}
   547 | 	return uint32(0);
   548 | }
   549 | #pragma endregion 
   550 | 
   551 | #pragma region CGameServerDlg::Timer_UpdateConcurrent(void * lpParam)
   552 | uint32 CGameServerDlg::Timer_UpdateConcurrent(void* lpParam)
   553 | {
   554 | 	while (true)
   555 | 	{
   556 | 		g_pMain->ReqUpdateConcurrent();
   557 | 		sleep(120 * SECOND);
   558 | 	}
   559 | 	return 0;
   560 | }
   561 | #pragma endregion 
   562 | 
   563 | #pragma region CGameServerDlg::Timer_TimedNotice(void * lpParam)
   564 | uint32 CGameServerDlg::Timer_TimedNotice(void* lpParam)
   565 | {
   566 | 	while (true)
   567 | 	{
   568 | 		foreach_stlmap_nolock(itr, g_pMain->m_TimedNoticeArray)
   569 | 		{

